package com.ep.instruktor.harmonogram.db;

import java.util.Date;
import java.util.Set;

import com.ep.general.instruktor.Instruktor;
import com.ep.instruktor.plac.db.PlacManewrowy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.annotations.Expose;

public class HarmonogramKursu {

	@Expose
	private int id;
	private Instruktor instruktor;
	@Expose
	private PlacManewrowy placManewrowy;
	@Expose
	private Date data;
	@Expose
	private String godzinaPoczatkowa;
	@Expose
	private String godzinaKoncowa;
	@Expose
	private Set<HarmonogramKursant> kursanci;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public Instruktor getInstruktor() {
		return instruktor;
	}

	public void setInstruktor(Instruktor instruktor) {
		this.instruktor = instruktor;
	}

	public PlacManewrowy getPlacManewrowy() {
		return placManewrowy;
	}

	public void setPlacManewrowy(PlacManewrowy placManewrowy) {
		this.placManewrowy = placManewrowy;
	}

	public Date getData() {
		return data;
	}

	public void setData(Date data) {
		this.data = data;
	}

	public String getGodzinaPoczatkowa() {
		return godzinaPoczatkowa;
	}

	public void setGodzinaPoczatkowa(String godzinaPoczatkowa) {
		this.godzinaPoczatkowa = godzinaPoczatkowa;
	}

	public String getGodzinaKoncowa() {
		return godzinaKoncowa;
	}

	public void setGodzinaKoncowa(String godzinaKoncowa) {
		this.godzinaKoncowa = godzinaKoncowa;
	}

	public Set<HarmonogramKursant> getKursanci() {
		return kursanci;
	}

	public void setKursanci(Set<HarmonogramKursant> kursanci) {
		this.kursanci = kursanci;
	}

	public String getAsJson() {
		GsonBuilder gsonBuilder = new GsonBuilder();
		gsonBuilder.excludeFieldsWithoutExposeAnnotation().setDateFormat("dd-MM-yyyy").create();
		Gson gson = gsonBuilder.create();

		return gson.toJson(this);
	}

	public boolean compareAndCopy(HarmonogramKursu item) {
		boolean copy = false;

		if (item == null) {
			return copy;
		}

		if (item.getData() != null && !this.data.equals(item.getData())) {
			this.data = item.getData();
			copy = true;
		}

		if (this.instruktor.getId() != item.getInstruktor().getId()) {
			this.instruktor = item.getInstruktor();
			copy = true;
		}

		if (!this.godzinaPoczatkowa.equals(item.getGodzinaPoczatkowa())) {
			this.godzinaPoczatkowa = item.getGodzinaPoczatkowa();
			copy = true;
		}

		if (!this.godzinaKoncowa.equals(item.getGodzinaKoncowa())) {
			this.godzinaKoncowa = item.getGodzinaKoncowa();
			copy = true;
		}

		if (this.getPlacManewrowy() != item.getPlacManewrowy() && item.getPlacManewrowy() != null) {
			this.placManewrowy = item.getPlacManewrowy();
			copy = true;
		}

		return copy;
	}
}
